package com.huilian.tool.douyin.web.service;

import com.alibaba.fastjson.JSONObject;
import com.huilian.tool.douyin.dto.CertificateDto;

import java.util.List;
import java.util.Map;

/**
 * @Author 少凡
 * @Date 2022-12-08 19:12
 * version 1.0
 */
public interface DouYinLiFeService {

    //该接口用于获取接口调用的凭证 client_token。该接口适用于抖音授权。
    JSONObject getClientToken();

    /**
     * 通过接口查询认领的门店列表，用于商家/服务商映射与抖音 POI 的门店关系。
     *
     * @param params
     * @param accessToken
     * @return
     */
    JSONObject shopPoiQuery(Map<String, Object> params, String accessToken);


    /**
     * 指定一个抖音 POI，对 POI 的基础信息进行举证和编辑
     *
     * @param params
     * @param accessToken
     * @return
     */
    JSONObject shopPoiUpdate(Map<String, Object> params, String accessToken);


    /**
     * 验券准备
     * 抖音团购券码的核销, 需要先调用本接口, 查询订单的券列表，选择要验的券，再调用验券接口，核销券码
     *
     * @param certificateDto
     * @param accessToken
     * @return
     */
    JSONObject verifyPrepare(CertificateDto certificateDto, String accessToken);


    /**
     * 验券
     * 用于核销券码，同时适用于抖音团购券码与三方券码
     *
     * @param verifyToken
     * @param poiId
     * @param encryptedCodes
     * @param accessToken
     * @return
     */
    JSONObject verifyCertificate(String verifyToken, String poiId, String encryptedCodes, String accessToken);


    /**
     * 撤销核销
     * 用于撤销核销状态
     *
     * @param verifyId
     * @param certificateId
     * @param accessToken
     * @return
     */
    JSONObject verifyCancel(String verifyId, String certificateId, String accessToken);


    /**
     * 券状态查询
     * 用于查询抖音券状态。
     *
     * @param encryptedCode
     * @param accessToken
     * @return
     */
    JSONObject getCertificate(String encryptedCode, String accessToken);


    /**
     * 券状态批量查询
     * 用于批量查询抖音券码和三方券码的状态。
     *
     * @param certificateDto
     * @param accessToken
     * @return
     */
    JSONObject certificateQuery(CertificateDto certificateDto, String accessToken);


    /**
     * 验券历史查询
     * 用于查询验券记录
     *
     * @param certificateDto
     * @param accessToken
     * @return
     */
    JSONObject certificateVerifyRecordQuery(CertificateDto certificateDto, String accessToken);

    /**
     * 分账明细查询
     * 用于查询分账明细
     *
     * @param certificateIds
     * @param accessToken
     * @return
     */
    JSONObject ledgerQueryRecordByCert(List<String> certificateIds, String accessToken);

    /**
     * 账单详细查询
     * 商家通过接口查询自己账单详情。
     *
     * @param certificateDto
     * @param accessToken
     * @return
     */
    JSONObject ledgerDetailedQuery(CertificateDto certificateDto, String accessToken);

    /**
     * 账单查询
     * 商户通过接口查询账单
     *
     * @param certificateDto
     * @param accessToken
     * @return
     */
    JSONObject ledgerQuery(CertificateDto certificateDto, String accessToken);

    /**
     * 发起店铺匹配 POI 同步任务
     *
     * @param params
     * @param accessToken
     * @return
     */
    JSONObject supplierMatch(Map<String, Object> params, String accessToken);

    /**
     * 店铺匹配任务结果查询
     *
     * @param supplierTaskIds
     * @param accessToken
     * @return
     */
    JSONObject supplierQueryTask(String supplierTaskIds, String accessToken);

    /**
     * 创建/修改团购活动
     *
     * @param params
     * @param accessToken
     * @return
     */
    JSONObject goodEditProduct(Map<String, Object> params, String accessToken);

    /**
     * 查询商品模板
     *
     * @param params
     * @param accessToken
     * @return
     */
    JSONObject goodGetTemplate(Map<String, Object> params, String accessToken);

    /**
     * 查询商品品类
     *
     * @param params
     * @param accessToken
     * @return
     */
    JSONObject goodGetCategory(Map<String, Object> params, String accessToken);

    /**
     * 查询商品线上数据列表
     *
     * @param params
     * @param accessToken
     * @return
     */
    JSONObject goodQueryOnlineProduct(Map<String, Object> params, String accessToken);

    /**
     * 同步库存
     *
     * @param params
     * @param accessToken
     * @return
     */
    JSONObject goodsSyncStock(Map<String, Object> params, String accessToken);


    /**
     * 合作列表获取
     *
     * @param accessToken
     * @return
     */
    JSONObject partnerQuery(String accessToken);

    /**
     * 创建合作关系
     *
     * @param accessToken
     * @return
     */
    JSONObject partnerCreate(String accountId, String accessToken);

    /**
     * 订单查询
     *
     * @param params
     * @param accessToken
     * @return
     */
    JSONObject tradeOrderQuery(Map<String, Object> params, String accessToken);

    /**
     * 查询上线团购套餐
     * @param accessToken
     * @param accountId
     * @return
     */
    JSONObject goodQueryOnlineProduct(String accessToken, String accountId);

}
